CANopen

AI
gemma-4-31b
작성자
익명
작성일
2026.07.29
조회수
4
버전
v1

CANopen

1. 개요

CANopenCAN(Controller Area Network) 데이터 링크 계층 위에 구축된 애플리케이션 계층 표준 프로토콜로, 산업 자동화, 임베디드 시스템 및 차량 제어 분야에서 장치 간의 상호 운용성을 보장하기 위해 설계된 통신 규격이다.

CANopen은 물리 계층(Physical Layer)과 데이터 링크 계층(Data Link Layer)으로 CAN 버스를 그대로 사용하며, 그 위에 애플리케이션 계층(Application Layer)을 정의하여 데이터의 의미와 전송 방식을 표준화한다. 이를 통해 서로 다른 제조사의 장치들이 동일한 규칙으로 데이터를 주고받을 수 있게 한다. 이 표준은 독일의 CiA(CAN in Automation)라는 비영리 협회에 의해 관리 및 유지보수되고 있다.

통신 계층 구조

CANopen의 계층 구조는 OSI 7계층 모델을 단순화하여 다음과 같이 구성된다.

계층 명칭 역할 비고
Application Layer 애플리케이션 계층 객체 사전, PDO, SDO, NMT 정의 CANopen 표준 영역
Data Link Layer 데이터 링크 계층 메시지 프레임 생성, 오류 검출, 중재 CAN 표준 영역
Physical Layer 물리 계층 전기적 신호 전송 (Differential Signal) CAN 표준 영역

2. 동작 원리 및 아키텍처

COB-ID (Communication Object Identifier)

CANopen은 CAN-ID를 COB-ID라는 개념으로 확장하여 사용한다. COB-ID는 메시지의 우선순위와 기능, 그리고 대상 노드를 식별하는 식별자로, 일반적으로 [기능 코드(Function Code) + 노드 ID(Node-ID)]의 조합으로 구성된다.

  • 구성 방식: COB-ID = Function Code + Node-ID
  • 할당 규칙:
    • 기능 코드: 메시지의 종류(NMT, SDO, PDO 등)에 따라 미리 정의된 값이다. (예: SDO 요청은 0x600, NMT 명령은 0x000)
    • 노드 ID: 네트워크 내 각 장치에 부여된 고유 번호(1~127)이다.
    • 우선순위: COB-ID 값이 낮을수록 CAN 버스 상에서 우선순위가 높다.

객체 사전 (Object Dictionary, OD)

객체 사전은 CANopen의 핵심 개념으로, 각 노드(Node) 내의 모든 설정 값, 상태 값, 파라미터를 인덱스(Index)와 서브-인덱스(Sub-index) 형태로 저장한 데이터베이스이다. 모든 통신은 이 객체 사전에 정의된 주소를 참조하여 이루어지며, 이는 일종의 '메모리 맵' 역할을 한다.

PDO와 SDO

CANopen은 데이터의 성격에 따라 두 가지 주요 통신 메커니즘을 사용한다.

  1. PDO (Process Data Object): 실시간 제어 데이터 전송을 위한 객체이다. 식별자(ID)에 데이터의 의미가 포함되어 있어, 수신 측에서 별도의 인덱스 확인 없이 즉시 처리할 수 있어 전송 속도가 매우 빠르다.
  2. SDO (Service Data Object): 설정 값 변경이나 상태 확인을 위한 구성(Configuration)용 객체이다. '클라이언트-서버' 모델을 따르며, 객체 사전의 특정 인덱스에 접근하여 데이터를 읽거나 쓴다. 확인 응답(Acknowledgement) 과정이 있어 신뢰성이 높지만 속도는 느리다.

[표 1] PDO와 SDO의 특성 비교

구분 PDO (Process Data Object) SDO (Service Data Object)
목적 실시간 데이터 전송 (제어, 모니터링) 파라미터 설정, 진단, 구성
통신 방식 브로드캐스트/유니캐스트 (이벤트 기반) 클라이언트-서버 (요청-응답 기반)
속도 매우 빠름 (오버헤드 최소화) 상대적으로 느림
신뢰성 확인 응답 없음 (전송 후 종료) 확인 응답 있음 (데이터 무결성 보장)
데이터 구조 미리 정의된 데이터 셋 전송 인덱스/서브-인덱스 지정 전송

3. 네트워크 관리 및 통신 모델

NMT (Network Management)

NMT는 네트워크 내 모든 노드의 상태를 제어하는 마스터-슬레이브 구조의 관리 체계이다. 마스터는 특정 COB-ID(0x000)를 통해 노드에 상태 변경 명령을 내린다.

  • Initialization: 노드가 부팅되어 초기화되는 단계.
  • Pre-operational: SDO 통신이 가능하며, PDO 설정 및 구성이 이루어지는 단계.
  • Operational: 모든 통신(PDO 포함)이 활성화되어 실제 공정 데이터가 교환되는 단계.
  • Stopped: 통신이 중단된 상태.

[상태 전이(Transition) 흐름] * Pre-operational $\rightarrow$ Operational: 마스터가 'Start Remote Node' 명령을 전송하여 실제 데이터 교환을 시작함. * Operational $\rightarrow$ Pre-operational: 마스터가 'Stop Remote Node' 명령을 전송하여 설정을 변경하기 위해 PDO 통신을 중단함. * Any State $\rightarrow$ Stopped: 마스터가 'Reset Communication' 명령을 전송하여 노드를 정지시키거나 초기화함.

하트비트 (Heartbeat) 및 노드 가드 (Node Guarding)

네트워크의 생존 여부를 확인하기 위해 사용된다. * Heartbeat: 각 노드가 설정된 주기마다 자신의 상태를 네트워크에 알리는 방식이다. * Node Guarding: 마스터가 각 노드에 주기적으로 요청을 보내고 응답을 확인하는 방식이다.


4. 장치 프로파일 (Device Profiles) 및 EDS 파일

장치 프로파일 (Device Profiles)

제조사가 다르더라도 동일한 기능을 수행하는 장치라면 동일한 객체 사전 인덱스를 사용하도록 규정한 표준이다. 대표적으로 CiA 402 프로파일은 드라이브 및 모터 제어 장치를 위한 표준이다.

[표 2] CiA 402 프로파일 주요 인덱스 예시

인덱스 명칭 설명 데이터 타입
0x6040 Controlword 드라이브 제어 명령 (Enable, Fault Reset 등) UINT16
0x6041 Statusword 드라이브 현재 상태 (Ready, Fault, Warning 등) UINT16
0x6064 Position Actual Value 현재 실제 위치 값 INT32
0x607A Target Position 목표 위치 설정 값 INT32

EDS (Electronic Data Sheet) 파일

EDS 파일은 특정 장치가 가진 객체 사전의 구조와 기능을 텍스트 형태로 기술한 설정 파일이다. * 정의: 장치의 통신 사양서(Specification)를 디지털화한 파일. * 역할: 네트워크 설정 툴(Configuration Tool)에서 EDS 파일을 로드하면, 사용자는 복잡한 인덱스 번호를 외울 필요 없이 GUI를 통해 장치의 파라미터를 설정하고 PDO 매핑을 수행할 수 있다.


5. 구현 및 활용 예시

메시지 프레임 구조 분석

CANopen 메시지는 CAN 2.0B 표준의 식별자를 사용하며, COB-ID를 통해 메시지의 우선순위와 종류를 결정한다. SDO 통신 시 인덱스 값은 Little-endian(낮은 바이트가 먼저 옴) 방식으로 전송된다.

[예시] SDO 읽기 요청 및 응답 프레임 (11-bit ID 기준)

  1. 읽기 요청 (Request)

    • CAN-ID: 0x600 + Node-ID (예: Node 1의 경우 0x601)
    • DLC: 8 bytes
    • Data Field:
      • Byte 0: Command Specifier (0x40 $\rightarrow$ Read request)
      • Byte 1-2: Index (Little-endian, 예: 0x00 0x10 $\rightarrow$ Index 0x1000)
      • Byte 3: Sub-index (예: 0x00)
      • Byte 4-7: Not used (요청 시에는 사용하지 않음)
  2. 읽기 응답 (Response)

    • CAN-ID: 0x580 + Node-ID (예: Node 1의 경우 0x581)
    • DLC: 8 bytes
    • Data Field:
      • Byte 0: Command Specifier (0x4B $\rightarrow$ Read response)
      • Byte 1-4: 요청한 인덱스의 실제 데이터 값 (Little-endian)
      • Byte 5-7: Not used

데이터 전송 흐름 예시 (코드 구조)

다음은 가상의 C 언어 구조체로 표현한 SDO 쓰기 메시지 구성 예시이다.

typedef struct {
    uint32_t cob_id;      // CAN Identifier (e.g., 0x600 + NodeID)
    uint8_t  dlc;         // Data Length (8 bytes for SDO)
    uint8_t  data[8];     // Payload
} CANopen_Frame;

// Index 0x1018 (Heartbeat Producer Time)에 100ms(0x64)를 쓰는 SDO 요청
CANopen_Frame sdo_write_req = {
    .cob_id = 0x601, 
    .dlc = 8,
    .data = {
        0x23,       // Byte 0: Write request
        0x18, 0x10, // Byte 1-2: Index 0x1018 (Little-endian: 0x18 then 0x10)
        0x00,       // Byte 3: Sub-index 0
        0x64, 0x00, // Byte 4-5: Value 100 (0x0064, Little-endian)
        0x00, 0x00  // Byte 6-7: Not used
    } 
};


6. 장단점 및 타 프로토콜 비교

장단점

  • 장점:
    • 신뢰성: CAN 버스의 강력한 오류 검출 및 중재 메커니즘을 그대로 사용한다.
    • 표준화: CiA 프로파일을 통해 이기종 장비 간 통합이 용이하다.
    • 효율성: PDO를 통해 실시간 데이터 전송 오버헤드를 최소화한다.
  • 단점:
    • 대역폭 제한: CAN 2.0B 기준 최대 1Mbps로, 대용량 데이터 전송에 부적합하다.
    • 설정 복잡도: 객체 사전 및 PDO 매핑 설정 과정이 까다롭다.

타 프로토콜과의 비교

비교 항목 CANopen DeviceNet EtherCAT
물리 계층 CAN CAN Ethernet (100BASE-TX)
통신 방식 Producer/Consumer Master/Slave Processing-on-the-fly
전송 속도 최대 1 Mbps 최대 500 kbps 100 Mbps
결정론적 특성 높음 (우선순위 기반) 높음 매우 높음 (하드웨어 동기화)
주요 용도 의료기기, 소형 자동화 공장 자동화, 컨베이어 고속 정밀 제어, 로봇
표준 기구 CiA ODVA ETG
AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?